package com.ty.dao;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

import org.hibernate.Session;

public interface BaseDaoI<T> {
	/**
	 * 保存方法
	 * @param o
	 * @return 编号
	 */
	public Serializable save(T o);

	/**
	 * 删除
	 * @param o
	 */
	public void delete(T o);

	/**
	 * 修改
	 * @param o
	 */
	public void update(T o);

	/**
	 * 保存或更新
	 * @param o
	 */
	public void saveOrUpdate(T o);

	/**
	 * 获取一条数据
	 * @param c  查询实体类
	 * @param id 编号
	 * @return
	 */
	public T get(Class<T> c, Serializable id);

	/**
	 * 通过hql语句获取一条数据
	 * @param hql
	 * @return
	 */
	public T get(String hql);

	/**
	 * 通过hql语句获取一条数据
	 * @param hql
	 * @param params 条件
	 * @return
	 */
	public T get(String hql, Map<String, Object> params);

	/**
	 * 查询列表数据
	 * @param hql
	 * @return
	 */
	public List<T> find(String hql);

	/**
	 * 查询列表数据
	 * @param hql
	 * @param params 参数
	 * @return
	 */
	public List<T> find(String hql, Map<String, Object> params);

	/**
	 * 分页
	 * @param hql
	 * @param page 当前页码数
	 * @param rows 总页数
	 * @return
	 */
	public List<T> find(String hql, int page, int rows);

	/**
	 * 分页
	 * @param hql
	 * @param params 参数
	 * @param page 当前页码数
	 * @param rows 总页数
	 * @return
	 */
	public List<T> find(String hql, Map<String, Object> params, int page, int rows);

	/**
	 * 获取总行数
	 * @param hql
	 * @return
	 */
	public Long count(String hql);
	/**
	 * 获取总行数
	 * @param hql
	 * @param params 参数
	 * @return
	 */
	public Long count(String hql, Map<String, Object> params);
	public List<Object> findObject(String hql, Map<String, Object> params, int page, int rows);
	public List<Object> findObject(String hql, Map<String, Object> params);
	public List<Object> findCreateSQL(String sql, int page, int rows);
	public Object SqlCount(String sql);
	
	public Session getCurrentSession();

}
